package com.tianjin.design.chainofresponsibility;

/**
 * @Description: 责任链模式# 行为型模式
 * 1、解释：使多个对象都有机会处理请求，从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链，并沿着这条链传递该请求，直到有一个对象处理此请求
 * 2、使用场景：例如平时的审批流
 *          举个例子：请假流程，请假小于3天只需要部门经理审批，请假大于3天小于10天需要部门总监审批，请假大于10天需要总经理审批
 * 3、实现思路：
 *      3-1 请假流程可能设计三级领导，所以可以先抽象领导类 LeaderHandler
 *          领导类中需要定义抽象处理方法，需要提供设置领导的上级方法
 *      3-2 领导需要处理请求，这里定义请求类 Request
 *      3-3 接下来就是对应实现每一级领导的具体审批职责
 *          部门经理 OneLeaderhandler
 *          TwoLeaderHandler
 *          ThreeLeaderHandler
 *
 *          为了方便，在这里定义一个责任链管理员 ChainManager ，都通过管理员提交请求（可以没有这个）
 *      3-4 定义责任链，发起请假审批，如下
 */
public class Test {

    public static void main(String[] args) {


        // 请假5天
        Request request = new Request();
        request.setName("小王");
        request.setDay(12);

        // 获取责任链入口,执行流程
        LeaderHandler leaderHandler = ChainManager.buildChain();
        leaderHandler.handler(request);


    }
}
